/*
#!/usr/bin/env gorun
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
EMAIL:y1053419035@qq.com
*/

package main

import (
    "net"
    "log"
    "fmt"
    "reflect"
    "io"
)

func main() {
    addr := "wwww.baidu.com:80" //定义主机名
    conn,err := net.Dial("tcp",addr) //拨号操作，需要指定协议。
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(conn.RemoteAddr().String()) //最好是加上后面的String方法，因为他们的那些是不一样的哟·当然你打印的时候可以不加。
    fmt.Println(conn.LocalAddr())
    fmt.Println(reflect.TypeOf(conn.LocalAddr()))
    fmt.Println(reflect.TypeOf(conn.RemoteAddr().String()))
    n,err := conn.Write([]byte("GET / HTTP/1.1\r\n\r\n")) //向服务端发送数据。用n接受返回的数据大小，用err接受错误信息。
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("写入的大小是:",n)

    buf := make([]byte,10) //定义一个切片的长度是1024。

    for  {
        n,err = conn.Read(buf) //接收到的内容大小。
        if err == io.EOF {
            conn.Close()
        }
        fmt.Print(string(buf[:n]))
    }

    fmt.Println(string(buf[:n])) //将接受的内容都读取出来。

}


/*

#以上代码输出结果如下：
111.13.101.208:80
172.16.3.210:63838
*net.TCPAddr
string
写入的大小是: 18
HTTP/1.1 400 Bad Request
Date: Mon, 31 Jul 2017 10:38:42 GMT
Server: Apache
Content-Length: 226
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
*/


